package net.suplementos.web.action;

import net.suplementos.negocio.FinanceiroDelegate;
import net.suplementos.pojo.Atendimento;
import net.suplementos.pojo.FormaPagamento;
import net.suplementos.pojo.Venda;
import net.suplementos.servico.FinanceiroServico;
import net.suplementos.web.LocalConstantes;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/realizarVenda")
@InterceptorRefs({
	@InterceptorRef(value = "store", params = {"operationMode", "AUTOMATIC"}),
	@InterceptorRef("defaultStack")
})
public class RealizarVendaAction extends ActionSupport {
	
	private Atendimento atendimento;
	private Venda venda;
	private FormaPagamento formaPagamento;

	private FinanceiroServico financeiroServico = FinanceiroDelegate.getInstance();
	
	@Action(value = "venda", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_FINANCEIRO_VENDA + "/venda.jsp") 
	})
	public String venda() throws Exception {
		return SUCCESS;
	}
	
	@Action(value = "finalizar", results = {
		@Result(name = SUCCESS, params = {
			"actionName", "listarAtendimentosEmAberto",
			"namespace", "/realizarAtendimento"
		}, type = "redirectAction")
	})
	public String finalizar() throws Exception {
		addActionMessage(getText("realizar.venda.mensagem.finalizar"));
		financeiroServico.finalizarVenda(getVenda());
		return SUCCESS;
	}
	
	@Action(value = "cancelar", results = {
		@Result(name = SUCCESS, params = {
			"actionName", "listarAtendimentosEmAberto",
			"namespace", "/realizarAtendimento"
		}, type = "redirectAction")
	})
	public String cancelar() throws Exception {
		addActionMessage(getText("realizar.venda.mensagem.cancelar"));
		financeiroServico.cancelarVenda(getVenda());
		return SUCCESS;
	}

	@Action(value = "solicitarDesconto", results = {
		@Result(name = SUCCESS, params = {
			"actionName", "listarAtendimentosEmAberto",
			"namespace", "/realizarAtendimento"
		}, type = "redirectAction")
	})
	public String solicitarDesconto() throws Exception {
		addActionMessage(getText("realizar.venda.mensagem.desconto"));
		financeiroServico.solicitarDesconto(getVenda());
		return SUCCESS;
	}
	
	@Action(value = "excluirFormaPagamento", results = {
		@Result(name = SUCCESS, params = {"actionName", "venda"}, type = "redirectAction")
	})
	public String excluirFormaPagamento() throws Exception {
		financeiroServico.excluirFormaPagamentoVenda(getFormaPagamento(), getVenda());
		return SUCCESS;
	}
	
	@Action(value = "incluirFormaPagamento", results = {
		@Result(name = SUCCESS, params = {"actionName", "venda"}, type = "redirectAction")
	})
	public String incluirFormaPagamento() throws Exception {
		financeiroServico.adicionarFormaPagamentoVenda(getFormaPagamento(), getVenda(), (float) getVenda().getValorTotal());
		return SUCCESS;
	}

	@Action(value = "recalcular", results = {
		@Result(name = SUCCESS, location = LocalConstantes.LOCAL_JSP_FINANCEIRO_VENDA + "/venda.jsp") 
	})
	public String recalcular() throws Exception {
		return SUCCESS;
	}

	public Atendimento getAtendimento() {
		return atendimento;
	}

	public void setAtendimento(Atendimento atendimento) {
		this.atendimento = atendimento;
	}

	public Venda getVenda() {
		return venda;
	}

	public void setVenda(Venda venda) {
		this.venda = venda;
	}

	public FormaPagamento getFormaPagamento() {
		return formaPagamento;
	}

	public void setFormaPagamento(FormaPagamento formaPagamento) {
		this.formaPagamento = formaPagamento;
	}

	public FinanceiroServico getFinanceiroServico() {
		return financeiroServico;
	}

	public void setFinanceiroServico(FinanceiroServico financeiroServico) {
		this.financeiroServico = financeiroServico;
	}
}